package FileChange2;

import java.io.File;

public class Zuoye_change {
	String sParent = "";
	void change(File f1, File f2){//将文件夹 f1 f2中的内容置换
		if(!f1.canRead()||!f2.canRead())
			return;
		String path1 = f1.getAbsolutePath();//获取f1的绝对路径
		String path2 = f2.getAbsolutePath();//获取f2的绝对路径
		if(path1.charAt(0)==path2.codePointAt(0)){//两个文件在一个盘内，可以直接移动文件夹
			System.out.println("文件夹在同一个磁盘上，可以直接重命名文件夹。");
			//建立中转文件夹f3
			File f3 = new File(f1.getParent()+File.separator+"f3");
			//将f2重命名为f3，f2中的所有内容全部放入了f3
			System.out.println(f2.getAbsolutePath()+"-->"+f3.getAbsolutePath()+" : "+f2.renameTo(f3));
			//将f1重命名f2，f1中的所有文件都放入了f2中
			System.out.println(f1.getAbsolutePath()+"-->"+f2.getAbsolutePath()+" : "+f1.renameTo(f2));
			//再把f3重命名为f1,f3的内容都放入到f1中
			System.out.println(f3.getAbsolutePath()+"-->"+f1.getAbsolutePath()+" : "+f3.renameTo(f1));
		}else{//不再一个盘内，文件夹不能直接移动，只能用循环移动文件，比较复杂
			System.out.println("不在同一个磁盘上，需要遍历转移文件。");
			File f3 = new File(f1.getParent()+File.separator+"f3");//用于中转f2的文件夹
			f3.mkdir();//创建f3文件夹
			//不再一个磁盘上，只能遍历文件夹中的所有文件，转移文件
			change文件夹(f2,f3);//将文件夹2中的内容先放入f3中
			//现在，循环遍历，将f2中的，空文件夹全部删除
			
			sParent = f2.getAbsolutePath();//把f2的路径名给sParent，用来判断什么时候结束删除
			delete文件夹(f2);//将f2文件夹彻底删除
			System.out.println("旧文件夹"+f2.getAbsolutePath()+" 已被删除： ");
			//将文件夹f1中的文件移到f2中
			f2.mkdir();
			change文件夹(f1,f2);
			//删除f1，以便于f3改名为f1
			sParent = f1.getAbsolutePath();
			delete文件夹(f1);
			System.out.println(f3.renameTo(new File(f3.getParent()+File.separator+f1.getName())));
		}
	}
	
	//将文件夹中的所有空文件夹全部删除
	private void delete文件夹(File f){
		if(f.list().length==0){
			System.out.println(f.getAbsolutePath()+"-->删除 : "+f.delete());
			if(f.getAbsolutePath().equals(sParent))
				return;
			delete文件夹(f.getParentFile());
		}
		else{
			String[] s = f.list();
			delete文件夹(new File(f.getAbsoluteFile()+"\\"+s[0]));
		}
	}
	//把文件从一个位置剪切到另一个位置
	private void change文件(File f1,File f2){
		System.out.println(f1.getAbsolutePath()+"-->"+f2.getAbsolutePath()+" : "+f1.renameTo(f2));
	}
	private void change文件夹(File f1,File f2){
		String[] str = f1.list();
		for(int i=0;i<str.length;i++){
			File newF1 = new File(f1.getAbsolutePath()+"\\"+str[i]);
			File newF2 = new File(f2.getAbsolutePath()+"\\"+str[i]);
			if(newF1.isFile()){
				change文件(newF1,newF2);
			}else{
				newF2.mkdirs();
				change文件夹(newF1,newF2);
			}
				
		}
	}
}
